package com.example.shutdown_v1.parser;

import com.example.shutdown_v1.dto.SensorDataPacket;
import com.example.shutdown_v1.entity.SensorModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 传感器解析器工厂（仅支持IM600）
 * 
 * 注意：目前仅支持IM600传感器
 */
@Slf4j
@Component
public class SensorParserFactory {
    
    @Autowired
    private IM600Parser im600Parser;
    
    /**
     * 解析传感器数据
     * 自动根据MAC地址识别型号并选择对应的解析器
     * 
     * @param hexData 十六进制数据字符串
     * @param sensorMac 传感器MAC地址
     * @return 解析后的传感器数据包
     */
    public SensorDataPacket parse(String hexData, String sensorMac) {
        return parse(hexData, sensorMac, null);
    }
    
    /**
     * 解析传感器数据（仅支持IM600）
     * 
     * @param hexData 十六进制数据字符串
     * @param sensorMac 传感器MAC地址
     * @param modelHint 型号提示(可选,但仅IM600会被处理)
     * @return 解析后的传感器数据包
     */
    public SensorDataPacket parse(String hexData, String sensorMac, SensorModel modelHint) {
        // 只支持IM600传感器
        try {
            log.debug("[工厂] [{}] 使用IM600解析器", sensorMac);
            return im600Parser.parse(hexData, sensorMac);
        } catch (Exception e) {
            log.error("[工厂] [{}] IM600解析失败: {}", sensorMac, e.getMessage(), e);
            return null;
        }
    }
    
    /**
     * 获取传感器型号
     */
    public SensorModel getSensorModel(String sensorMac) {
        return SensorModel.fromMac(sensorMac);
    }
}

